package com.meloinfo.common.exception;

import org.springframework.util.StringUtils;

import com.meloinfo.common.utils.MessageUtils;

/**
 * 基础异常
 * @author 谢磊
 * 
 * @file BaseException.java
 * 
 * @description 
 * 
 * @date 2016年6月1日 下午1:56:27
 *
 */
public class BaseException extends RuntimeException {

	// 所属模块
	private String module;
	
	/**
	 * 错误码
	 */
	private String code;
	
	/**
	 * 错误码对应的参数
	 */
	private Object[] args;
	
	/**
	 * 错误消息
	 */
	private String defaultMessage;
	
	public BaseException(String module, String code, Object[] args, String defaultMessage) {
		this.module = module;
        this.code = code;
        this.args = args;
        this.defaultMessage = defaultMessage;
	}
	
	public BaseException(String module, String code, Object[] args) {
		this(module, code, args, null);
	}
	
	public BaseException(String module, String defaultMessage) {
        this(module, null, null, defaultMessage);
    }
	
	public BaseException(String code, Object[] args) {
        this(null, code, args, null);
    }
	
	public BaseException(String defaultMessage) {
        this(null, null, null, defaultMessage);
    }
	
	public String getMessage() {
		String message = null;
        if (!StringUtils.isEmpty(code)) {
            message = MessageUtils.message(code, args);
        }
        if (message == null) {
            message = defaultMessage;
        }
        return message;
	}
	
	public String getModule() {
        return module;
    }

    public String getCode() {
        return code;
    }

    public Object[] getArgs() {
        return args;
    }

    public String getDefaultMessage() {
        return defaultMessage;
    }
    
    @Override
    public String toString() {
        return this.getClass() + "{" +
                "module='" + module + '\'' +
                ", message='" + getMessage() + '\'' +
                '}';
    }
}
